// int newnum1[1003],newnum2[1003];
class Solution {
public:
    long long numberOfPairs(vector<int>& nums1, vector<int>& nums2, int k) {
        // 枚举因子
        long long ret = 0;
        map<int, int> mm;
        for (int i : nums1) {
            if (i % k)
                continue;
            i /= k;
            ++mm[i];
            if (i != 1)
                ++mm[1];
            for (int tmp = 2; tmp * tmp <= i; tmp++) {
                if (i % tmp == 0) {
                    mm[i / tmp]++;
                    if (tmp * tmp != i)
                        mm[tmp]++;
                }
            }
            //  for(auto e : mm){
            // cout <<e.first <<' '<<e.second<<'|';
        }
    for (auto i : nums2) {
        ret += mm[i];
    }
    return ret;
    // long long ret = 0;
    // map<int, int> m1, m2;
    // for (int i : nums1) {
    //     if (i % k == 0)
    //         ++m1[i];
    // }
    // for (int i : nums2)
    //     ++m2[i * k];
    // for (auto i = m1.begin(); i != m1.end(); i++) {
    //     for (auto j = m2.begin(); j != m2.end(); j++) {
    //         if (j->first > i->first) {
    //             break;
    //         }
    //         if (i->first % j->first == 0) {
    //             ret += (long long)i->second * j->second;
    //             // cout << i->first << ' ' << j->first << endl;
    //         }
    //     }
    // }
    // vector<int> newnum1{1003,0};
    // vector<int> newnum2{1003,0};
    // for (int i : nums1)
    //     ++newnum1[i];
    // for (int i : nums2)
    //     ++newnum2[i * k];

    // for (int i : nums1)
    //     ++m1[i];
    // for (int i : nums2)
    //     ++m2[i * k];
    // for (auto i = m1.begin(); i != m1.end(); i++) {
    //     for (auto j = m2.begin(); j != m2.end(); j++) {
    //         if (i->first % j->first == 0) {
    //             ret += (long long)i->second * (long long)j->second;
    //         }
    //     }
    // }
    // for (int i = 0; i < nums1.size(); i++) {
    //     for (int j = 0; j < nums2.size(); j++) {
    //         if (nums1[i] % (nums2[j] * k )== 0) {
    //             ret++;
    //             cout << i << ' ' << j << endl;
    //         }
    //     }
    // }
    return ret;
}
}
;